package com.guaoran.interview.in2018.collection.set;

import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

/**
 * @Author gucheng
 * @Description compare 示例 ：这里用 TreeSet 和 HashSet 来说明 compareTo 的问题
 * 2019-08-14 14:49
 */
public class CompareDemo {
    public static void main(String[] args) {
        BigDecimal big10 = new BigDecimal("1.0");
        BigDecimal big100 = new BigDecimal("1.00");

        // 从结果中可以看到 treeSet 集合只要一个元素，而 HashSet 有两个元素 ,导致的原因说明 a.compareTob==0  但是 a.equals(b) != true
        // treeSet 中 使用到了BigDecimal 的compareTo 方法，导致(1.0).compareTo(1.00) == 0 ,于是便会当成是修改元素而不是添加元素
        // hashSet 中 使用的是 key.hashCode() ，[这块跟 equals 有关] 会发现这两个元素不相同，所以存在两个元素
        Set<BigDecimal> treeSet = new TreeSet<>();
        treeSet.add(big10);
        treeSet.add(big100);
        Set<BigDecimal> hashSet = new HashSet<>();
        hashSet.add(big10);
        hashSet.add(big100);
        System.out.println("treeSet:"+treeSet);
        System.out.println("hashSet:"+hashSet);
        System.out.println("================================\n");
        System.out.println(big10.equals(big100));
        System.out.println("(1.0).compareTo(1.00):"+(big10.compareTo(big100))+"---(1.00).compareTo(1.0)"+(big100.compareTo(big10)));
        System.out.println("(1.0).equals(1.00):"+(big10.equals(big100))+"---(1.00).equals(1.0)"+(big100.equals(big10)));
    }
}
